Spring Security-এর মূল দুটি কাজ হলো Authentication (প্রমাণীকরণ) এবং Authorization (অনুমোদন)। এই দুটি প্রক্রিয়াই একটি অ্যাপ্লিকেশনকে সুরক্ষিত করতে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে।
১. Authentication (প্রমাণীকরণ)
Authentication হলো প্রক্রিয়া, যার মাধ্যমে ব্যবহারকারীর পরিচয় যাচাই করা হয়। অর্থাৎ, এটি যাচাই করে যে ব্যবহারকারী আসলেই সেই ব্যক্তি কি না, যিনি তিনি দাবী করছেন। সাধারণত, এটি ইউজারনেম এবং পাসওয়ার্ড ব্যবহার করে সম্পন্ন হয়।
Authentication-এর মূল ধারণা
- Input: ব্যবহারকারীর লগইন তথ্য (ইউজারনেম এবং পাসওয়ার্ড)।
- Validation: লগইন তথ্য যাচাই করা হয় ডাটাবেস বা অন্য কোন ডাটা সোর্সের মাধ্যমে।
- Output: সফল হলে ব্যবহারকারীর তথ্য (
UserDetails) একটি SecurityContext-এ সংরক্ষণ করা হয়।
Spring Security-তে Authentication এর প্রক্রিয়া
- AuthenticationManager:
Authentication পরিচালনার মূল ইন্টারফেস। এটি বিভিন্নAuthenticationProvider-এর মাধ্যমে কাজ করে। - AuthenticationProvider:
ব্যবহারকারীর তথ্য যাচাই করে এবং সফল হলেAuthenticationঅবজেক্ট প্রদান করে। - UserDetailsService:
ব্যবহারকারীর তথ্য (যেমন ইউজারনেম, পাসওয়ার্ড, রোল) ডাটাবেস থেকে লোড করার জন্য ব্যবহৃত হয়।
উদাহরণ: Authentication কনফিগারেশন
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(
User.withUsername("user")
.password("{noop}password") // {noop} দিয়ে পাসওয়ার্ড এনক্রিপশন এড়ানো
.roles("USER")
.build()
);
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
return configuration.getAuthenticationManager();
}
}
২. Authorization (অনুমোদন)
Authorization হলো প্রক্রিয়া, যার মাধ্যমে যাচাই করা হয় যে ব্যবহারকারী একটি নির্দিষ্ট রিসোর্স বা অ্যাকশনে অ্যাক্সেস করার অনুমতি পেয়েছেন কি না। এটি সাধারণত ব্যবহারকারীর Role বা Privilege ভিত্তিক হয়।
Authorization-এর মূল ধারণা
- Input: ব্যবহারকারীর রোল বা প্রিভিলেজ।
- Validation: যাচাই করা হয় ব্যবহারকারী একটি নির্দিষ্ট রিসোর্সে অ্যাক্সেস করার অনুমোদন রাখেন কি না।
- Output: অনুমতি থাকলে রিসোর্সে অ্যাক্সেস, অন্যথায় অ্যাক্সেস ডিনাই করা।
Spring Security-তে Authorization এর প্রক্রিয়া
- AccessDecisionManager:
এটি নির্ধারণ করে যে ব্যবহারকারী একটি নির্দিষ্ট রিসোর্সে অ্যাক্সেস পাবে কি না। - Security Metadata:
প্রতিটি URL বা মেথডের জন্য নির্ধারিত সিকিউরিটি মেটাডাটা, যেমন রোল বা প্রিভিলেজ।
উদাহরণ: Authorization কনফিগারেশন
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers("/admin/**").hasRole("ADMIN") // শুধুমাত্র ADMIN রোলের জন্য
.requestMatchers("/user/**").hasRole("USER") // শুধুমাত্র USER রোলের জন্য
.anyRequest().authenticated() // বাকি সব রিকোয়েস্টের জন্য অথেন্টিকেশন প্রয়োজন
.and()
.formLogin() // ডিফল্ট লগইন ফর্ম সক্রিয়
.and()
.logout(); // ডিফল্ট লগআউট ফর্ম সক্রিয়
return http.build();
}
}
Authentication এবং Authorization-এর পার্থক্য
| Authentication | Authorization |
|---|---|
| এটি ব্যবহারকারীর পরিচয় যাচাই করে। | এটি যাচাই করে ব্যবহারকারী একটি রিসোর্সে অ্যাক্সেস পাবে কি না। |
| "Who are you?" প্রশ্নের উত্তর দেয়। | "What are you allowed to do?" প্রশ্নের উত্তর দেয়। |
| এটি লগইন সময় ঘটে। | এটি লগইন হওয়ার পর প্রতিটি রিসোর্স অ্যাক্সেসের সময় ঘটে। |
| উদাহরণ: ইউজারনেম এবং পাসওয়ার্ড যাচাই। | উদাহরণ: রিসোর্সে অ্যাক্সেসের জন্য রোল যাচাই। |
Spring Security-তে Method Level Authorization
Spring Security মেথড স্তরে অথরাইজেশন নিয়ন্ত্রণের জন্য @PreAuthorize, @PostAuthorize, এবং @Secured অ্যানোটেশন সরবরাহ করে।
উদাহরণ: Method Level Authorization
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@PreAuthorize("hasRole('ADMIN')")
public String adminAccess() {
return "Admin can access this!";
}
@PreAuthorize("hasRole('USER')")
public String userAccess() {
return "User can access this!";
}
}
উপসংহার
- Authentication ব্যবহারকারীর পরিচয় যাচাই করে।
- Authorization নির্ধারণ করে যে ব্যবহারকারী নির্দিষ্ট কাজ বা রিসোর্সে অ্যাক্সেস করতে পারেন কি না।
Spring Security-এর মাধ্যমে Authentication এবং Authorization সহজে এবং কার্যকরভাবে পরিচালনা করা যায়। এটি অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more